<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box1{width: 100px;height: 100px;background: red;position: absolute;left:0px;top:0;}
        .box2{width: 100px;height: 100px;background: green;position: absolute;left:0;top:130px;}
        .line{width:1px;height: 500px;background: black;position: absolute;left:800px;top:0;}
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="line"></div>
</body>
<script>
    const obox1 = document.querySelector(".box1")

    obox1.onclick = function(){
        move(obox1, {
            left: 900,
            top: 30
        });
    }

    // 多属性运动
    // 一个元素只有一个计时器
    // 如果一个属性到目标了，会清除计时器    x




    function move(ele, data){
        clearInterval(ele.t);
        ele.t = setInterval(() => {
            // 假设，计时器从一开始就不应该存在
            let flag = true;
            // 遍历对象，拿到属性和目标
            for(let i in data){
                let now = parseInt(getStyle(ele, i));
                let speed = (data[i] - now) / 7;
                speed = speed < 0 ? Math.floor(speed) : Math.ceil(speed);
                // 如果一个属性到目标了，先别清除计时器，因为有可能其他属性还没到目标
                // 删除了原本清除计时器的代码
                ele.style[i] = now + speed + "px";
                // 只要有一个属性还没到目标，计时器就要存在
                if(data[i] !== now){
                    flag = false;
                }
            }
            // 如果没有属性没到目标，计时器就真的不应该存在了
            if(flag){
                clearInterval(ele.t)
            }
        }, 30);
    }
    function getStyle(ele, attr){
        if(getComputedStyle){
            return getComputedStyle(ele)[attr];
        }else{
            return ele.currentStyle[attr];
        }
    }

</script>
</html>